When new computer architecture is released it is desirable for the applications written for a previous version of the architecture to run flawlessly on the new architecture. This capability is often referred to as “backwards compatibility.” Implementing backwards compatibility involves emulating a target legacy device on the new host architecture so that the new architecture can execute the instructions of programs written for the legacy device. Computer architectures change over time to take advantage of technological advances in busses, clock speed, processor architecture, caching, standards, etc. When one computer architecture is replaced by a newer architecture the older architecture becomes what is called legacy architecture. Over the course of its development software applications, such as network protocols, user interfaces, audio processing, device drivers, graphics processing, messaging, word processors, spreadsheets, database programs, games, and other applications are written for a legacy architecture. Such legacy software still has value to its users even if they upgrade to a new architecture. A need therefore exists to be able to run legacy software on the new architecture.
Differences in performance of the hardware components of a new device and a legacy device can cause errors in synchronization on the new device, which may cause a legacy application to crash or produce incorrect output when running on a new device architecture. Such differences in performance can arise, e.g., from differences in hardware architecture between the new and legacy devices. It is within this context that aspects of the present disclosure arise.